perm filename KLLOAD[KL,SYS] blob
sn#210155 filedate 1976-04-14 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00003 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 TITLE KLLOAD LOAD A PROGRAM FOR THE KL10 INTO PHYSICAL 1400000
C00005 00003 GETNAM, GETSIX
C00010 ENDMK
C⊗;
TITLE KLLOAD LOAD A PROGRAM FOR THE KL10 INTO PHYSICAL 1400000
FL←0
A←1
B←2
C←3
D←4
R←16
P←17
PDLEN←←100
PDLIST: BLOCK PDLEN
FILDEV←←0
FILNAM←←1
FILEXT←←2
FILPPN←←4
QUOTE←←400
BLNKSN←←1000
INNAM: 'DSK '
'DDT '
'DMP '
0
' KLSYS'
CRLF: BYTE(7)15,12
LSTCHR: 0
NOCORE: OUTSTR [ASCIZ/CORE uuo failed.
/]
JRST ERROR
NOHI: OUTSTR [ASCIZ/GETHI failed.
/]
JRST ERROR
NOLOOK: OUTSTR [ASCIZ/Lookup failed: /]
MOVEI R,INNAM
PUSHJ P,TYFILE
OUTSTR CRLF
JRST ERROR
NOOPEN: OUTSTR [ASCIZ/Device /]
MOVE B,INNAM
PUSHJ P,TYSIX
OUTSTR [ASCIZ/: unavailable.
/]
ERROR: CLRBFI
RESET
JRST ST1
ST: RESET
OUTSTR [ASCIZ/KLLOAD.
Be sure physical address 1400000 is available and online to the KA10.
If it isn't you'll hang the system. If you need to change the memory
configuration, stop the KA10 first.
/]
ST1: MOVE P,[IOWD PDLEN,PDLIST]
OUTSTR [ASCIZ/Type name of the DMP file to load: /]
MOVEI R,INNAM
PUSHJ P,GETNAM
JRST ERROR
MOVSI A,'DMP' ;DEFAULT EXTENSION
SKIPN FILEXT(R)
MOVEM A,FILEXT(R) ;STORE DEFAULT EXT.
HLLZS FILEXT(R) ;LEFT HALF ONLY.
MOVEI A,17
MOVE B,INNAM
MOVEI C,0
OPEN 0,A
JRST NOOPEN
MOVE D,[INNAM+1,,A]
BLT D,D
LOOKUP 0,A
JRST NOLOOK
HLRO A,D ;A←-WC OF FILE
SUB A,JOBFF
MOVN A,A
CORE A, ;REQUEST ENOUGH CORE
JRST NOCORE
HLLZ A,D
HRR A,JOBFF↑
SUBI A,1
MOVEI B,0
INPUT 0,A
CLOSE 0,
BREAK: MOVE 0,[400,,1400*40+20] ;ATTACH PHYSICAL HIGH CORE AS UPPER SEGMENT
GETHI 0,
JRST NOHI
SETZM 400000
MOVE A,[400000,,400001]
BLT A,-1 ;ZERO CORE
HRL A,JOBFF
HRRI A,400074
HLRO B,D
SUBI B,400074
MOVN B,B
BLT A,-1(B)
MOVEI A,377777
MOVEM A,400037
MOVE A,400116
MOVEM A,400036
OUTSTR [ASCIZ/Done.
Reconfigure memory. Be sure to stop the KA10 while you diddle port selects.
/]
EXIT 1,
JRST ST
;GETNAM, GETSIX
GETNAM: SETZM (R)
MOVSI A,(R)
HRRI A,1(R)
BLT A,FILPPN(R)
MOVSI A,'DSK'
MOVEM A,FILDEV(R)
PUSHJ P,GETSIX
POPJ P, ;ERROR OF SOME KIND
CAIE A,":" ;IS THIS A DEVICE NAME?
JRST GETNM1 ;NO. MUST BE A FILE NAME
MOVEM B,FILDEV(R) ;STORE DEVICE NAME
PUSHJ P,GETSIX ;GET FILE NAME
POPJ P, ;ERROR
GETNM1: MOVEM B,FILNAM(R)
CAIE A,"." ;EXTENSION NEXT?
JRST GETNM2 ;NO. CHECK FOR PPN.
PUSHJ P,GETSIX
POPJ P,
TRNE B,-1 ;ONLY 3 LETTERS ALLOWED IN EXTENSION.
JRST ERR03
HLLOM B,FILEXT(R) ;STORE EXT. FLAG AS EXPLICIT EXT.
GETNM2: CAIE A,"["
JRST GETNM7 ;NO PPN.
PUSHJ P,GETSIX ;GET PROG NAME.
POPJ P,
TRNE B,-1
JRST ERR04
JUMPE B,ERR04
CAIE A,","
JRST ERR04
TRNE B,-1
JRST ERR04
JUMPE B,ERR04
GETNM3: TLNE B,77
JRST GETNM4
LSH B,-6
JRST GETNM3
GETNM4: HLLZM B,FILPPN(R)
PUSHJ P,GETSIX
POPJ P,
TRNE B,-1
JRST ERR04
JUMPE B,ERR04
GETNM5: TLNE B,77
JRST GETNM6
LSH B,-6
JRST GETNM5
GETNM6: HLRM B,FILPPN(R)
CAIE A,"]"
JRST GETNM7
PUSHJ P,GETSIX
POPJ P,
JUMPN B,ERR05 ;NOT NULL FOLLOWING ]
GETNM7: CAIE A,12
CAIN A,"←"
JRST CPOPJ1
JRST ERR05
GETSIX: MOVE C,[POINT 6,B]
MOVEI B,0
TRZ FL,QUOTE!BLNKSN
GETSX1: PUSHJ P,GETCHR
CAIN A,"↓"
JRST [TRC FL,QUOTE ;COMPLEMENT QUOTE
JRST GETSX1]
CAIL A,"A"+40
CAILE A,"Z"+40
JRST .+2
SUBI A,40 ;ALWAYS CONVERT TO UPPER CASE.
TRNE FL,QUOTE ;IN QUOTE MODE?
JRST GETSX2 ;YES. SKIP VALIDITY TESTS
CAIN A,15
JRST GETSX1 ;FLUSH CR.
CAIN A," "
JRST [JUMPE B,GETSX1 ;FLUSH LEADING BLANKS
TRO FL,BLNKSN ;AFTER A BLANK, MUST SEE VALID DELIMITER
JRST GETSX1]
CAIL A,"A"
CAILE A,"Z"
JRST .+2
JRST GETSX2 ;ACCEPT CHARACTER
CAIL A,"0"
CAILE A,"9"
JRST .+2
JRST GETSX2
CAIE A,"$"
JRST CPOPJ1 ;THIS IS A DELIMITER!
GETSX2: SUBI A,40
TRNE FL,BLNKSN
JRST ERR06
JUMPL A,ERR06 ;ILLEGAL
TLNE C,770000 ;SKIP IF "B" IS FULL ALREADY
IDPB A,C ;STUFF ANOTHER BYTE IN B
JRST GETSX1 ;LOOP
CPOPJ1: AOS (P)
CPOPJ: POPJ P,
TYSIX: JUMPE B,CPOPJ
MOVEI A,0
LSHC A,6
ADDI A,40
OUTCHR A
JRST TYSIX
TYFILE: MOVE B,FILDEV(R)
CAMN B,['DSK ']
JRST TYFIL1
PUSHJ P,TYSIX
OUTCHR [":"]
TYFIL1: SKIPN B,FILNAM(R)
POPJ P,
PUSHJ P,TYSIX
HLLZ B,FILEXT(R)
JUMPE B,TYFIL2
OUTCHR ["."]
PUSHJ P,TYSIX
TYFIL2: SKIPN B,FILPPN(R)
POPJ P,
OUTCHR ["["]
HLLZ B,B
PUSHJ P,TYSIX
OUTCHR [","]
HRLZ B,FILPPN(R)
PUSHJ P,TYSIX
OUTCHR ["]"]
POPJ P,
ERR03: OUTSTR [ASCIZ/Error in file extension.
/]
POPJ P,
ERR04: OUTSTR [ASCIZ/Error in PPN
/]
POPJ P,
ERR05: OUTSTR [ASCIZ/Error at end of a term.
/]
POPJ P,
ERR06: OUTSTR [ASCIZ/Error in term
/]
POPJ P,
GETCHR: INCHWL A
MOVEM A,LSTCHR
POPJ P,
END ST